// 1. 问题：最终数组的值类型是any
// function createArray(value: any, length: number): any[] {
//   const arr: any[] = [];
//   for (let i = 0; i < length; i++) {
//     arr.push(value);
//   }
//   return arr;
// }
// const arr1 = createArray(1, 10);
// const arr2 = createArray("hello", 10);

// 泛型：在定义函数、接口、类的类型时，不先指定具体类型，而是在使用时指定具体类型
// - 定义泛型参数 <T> - 使用泛型参数
// T -> type 类型
// K -> Key 属性名
// V -> Value 属性值
// E -> Element 元素类型
function createArray<T>(value: T, length: number): T[] {
  const arr: T[] = [];
  for (let i = 0; i < length; i++) {
    arr.push(value);
  }
  return arr;
}
// const arr1 = createArray<number>(1, 10);
// const arr2 = createArray<string>("hello", 10);
const arr1 = createArray(1, 10);
const arr2 = createArray("hello", 10);

// 接口定义泛型参数
interface Person<T> {
  name: T;
}
const p: Person<string> = {
  name: "jack",
};

// 类定义泛型参数
class People<T> {
  name: T;
}

// 函数表达式定义泛型参数
// const fn = <T>() => {};
